package com.guigu.gulicart.controller;

import com.guigu.gulicart.entity.dto.AddToCartDto;
import com.guigu.gulicart.entity.dto.UpdateCartItemDto;
import com.guigu.gulicart.service.CartService;
import com.guigu.gulicommon.entity.pojo.Cart;
import com.guigu.gulicommon.entity.pojo.CartItem;
import com.guigu.gulicommon.entity.pojo.res.Res;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotNull;
import java.util.List;

import static com.guigu.gulicommon.constant.CheckParametersConstant.SKU_ID_CANNOT_BE_NULL;

/**
 * 购物车控制层
 *
 * @author 陈俊杰
 * @version 1.0-
 * @since 2024/9/21 12:22
 */
@RestController
@RequestMapping("/cart")
@Validated
@Log4j2
public class CartController {
    @Autowired
    private CartService cartService;

    /**
     * 添加商品
     *
     * @param addToCartDto 添加商品参数
     * @return 添加结果
     */
    @PostMapping
    public Res<CartItem> addToCart(@Validated @RequestBody AddToCartDto addToCartDto) {
        log.info("添加商品参数为: [{}]", addToCartDto);
        return cartService.addToCart(addToCartDto);
    }

    /**
     * 批量删除购物项
     *
     * @param ids 批量删除购物项的id集合
     * @return vo 被删除的购物项的信息
     */
    @DeleteMapping
    public Res<Long> removeByIdsBatch(
            @RequestParam(value = "ids")
            @NotNull(message = SKU_ID_CANNOT_BE_NULL)
            List<Long> ids
    ) {
        log.info("批量删除购物项(通用)接口入参为:[{}]", ids);
        return cartService.deleteByIdsBatch(ids);
    }

    /**
     * 修改购物车项商品数量
     *
     * @param dto 修改购物车项商品数量的参数
     * @return vo 修改后购物车项商品数量的信息
     */
    @PutMapping
    public Res<CartItem> update(@Validated @RequestBody UpdateCartItemDto dto) {
        log.info("修改购物车项商品数量(通用)接口入参为:[{}]", dto);
        return cartService.update(dto);
    }


    /**
     * 获取购物车信息
     */
    @GetMapping
    public Res<Cart> getCartInfo() {
        return cartService.getCartInfo();
    }

//    /**
//     * 结算购物车
//     */
//    @GetMapping("/settlement")
//    public Res<Cart> settlement() {
//        return cartService.settlement();
//    }

}
